約 3,486,002 件
https://w.atwiki.jp/cschola/pages/21.html
string C++の標準ライブラリには文字列操作を便利にした string というものがあります。 従来の char* は単なる文字配列でしたが、stringは文字列操作のための演算子や関数が用意されています。 stringを使うには string をincludeします。 #include string string は std に含まれているため std string でアクセスします。 初期化 string の初期化の内基本的な2種類を紹介します。 std string str; std string str("はろー わーるど!"); このほかにも多くの初期化方法が用意されています。 代入 文字列の割り当てには = 演算子か .assign() を使います。 std string str; str = "はろー わーるど!";// = で代入 str.assign("はろー わーるど!");// .assign() で代入 追加 結合 = か + 演算子または .append() を使うことで文字列の後ろに他の文字列を追加できます。 std string str; str = "はろー";// "はろー"を代入 str += " わーるど";// "わーるど" を = で追加 str.append("!");// "!" を .append()で追加 比較 == != = = を使い文字列同士を比較することが出来ます。 また .compare() を使うと比較結果を戻り値で返してくれます。 std string str1("ABC");// str1を "ABC" で初期化して作成 std string str2 = str1;// str1 をコピーして str2を作成 // str1 と str2 を比較 if(str1 == str2){ std cout str1 + "と" + str2 + "は同じ" std endl; } 文字の取得 文字列から文字を取り出すには [] 演算子か .at() を使います。 std string str("abcdef");// str を "abcdef" で初期化して作成 char c1 = str[0];// strの0番目 a を c1 に入れる char c2 = str.at(5);// strの5番目 f を c2 に入れる std cout c1 c2 std endl;//c1 と c2 を表示 文字列の取得 .substr() を使うと指定した部分の文字列が返ってきます。 第1引数が取り出す位置で、第2引数が取り出す長さです。 std string str1("Hello World!!"); std string str2; str2 = str1.substr(6,5); // str の6番目から5文字 "World" を抜き出して str2 に代入 std cout str2 std endl;// str2を表示 第2引数を省略すると文字列の最後まで取り出されます。 文字列の長さを調べる 文字列の長さを調べるには .length() か .size() を使います。 これら2つは同じ意味です。 std string str("abc"); // str の長さを表示 std cout str.length() std endl str.size() std endl; 日本語は2バイト文字という点に気をつけましょう。 文字列が空かどうか調べる .empty() を使うと、文字列が空のとき true を返し、それ以外のとき false を返します。 練習問題 次のようなプログラムを作ってください 第1問 ユーザーからの入力を文字列に割り当て "Apple"という文字と比較する。 また比較した結果によりメッセージを出力する。 第2問 ユーザーからの入力を文字列に割り当て、 長さが5以上の文字列が入力されるまで繰り返す abc 5文字以上入力してください hello オッケー testcounter 合計 - 今日 - 昨日 -
https://w.atwiki.jp/kojiro/pages/15.html
ASC 文字列内の全角の英数カナ文字を、半角文字に変換します。 CHAR 数値を ASCII または JIS コード番号と見なし、それに対応する文字を返します。 CLEAN 文字列から印刷できない文字を削除します。 CODE 文字列の先頭文字に対応する ASCII または JIS コードを返します。 CONCATENATE 複数の文字列を結合して 1 つの文字列にまとめます。 DOLLAR 数値を四捨五入し、ドル書式を設定した文字列に変換します。 EXACT 2 つの文字列が等しいかどうかをテストします。 FIND 指定した文字列を他の文字列の中で検索します。大文字と小文字は区別されます。 FIXED 数値を四捨五入し、書式設定した文字列に変換します。 JIS 文字列内の半角の英数カナ文字を、全角文字に変換します。 LEFT 文字列の先頭 (左端) から指定した数の文字を返します。 LEN 文字列に含まれる文字数を返します。 LOWER 文字列に含まれる英字をすべて小文字に変換します。 MID 文字列の指定した位置から指定した数の文字を返します。 PHONETIC 文字列からふりがなを抽出します。 PROPER 文字列に含まれる英単語の先頭文字だけを大文字に変換します。 REPLACE 文字列中の指定した数の文字を他の文字に置き換えます。 REPT 文字列を指定した回数だけ繰り返して表示します。 RIGHT 文字列の末尾 (右端) から指定した数の文字を返します。 SEARCH 指定した文字列を他の文字列の中で検索します。大文字と小文字は区別されません。 SUBSTITUTE 文字列中の指定した文字を他の文字に置き換えます。 T 引数を文字列に変換します。 TEXT 数値を書式設定した文字列に変換します。 TRIM 文字列から余分なスペースを削除します。 UPPER 文字列に含まれる英字をすべて大文字に変換します。 VALUE 文字列を数値に変換します。と謳っていますが、セルを参照させた場合と数式の中に直接文字列を入力した場合で結果が異なります。 YEN 数値を四捨五入し、円書式を設定した文字列に変換します。
https://w.atwiki.jp/shunbo/pages/41.html
文字列の連結#include string.h char *strcat(char *s1, const char *s2); char *s1 : 連結先の文字型配列 const char *s2 : 連結する文字列 文字列のコピー char *strcpy(char *s1, const char *s2); char *s1 : 複写先の文字型配列 const char *s2 : 複写する文字列 文字列の初期化 void* memset(void* 文字列など, int セットする文字(unsigned charに変換される), size_t サイズ) memset(filename,0x00,sizeof(filename)); でfilenameの中身を初期化 メモリの確保はきちんと!
https://w.atwiki.jp/opto-c/pages/35.html
文字列の代入 C言語においては文字列は単純に代入できない。 例えば以下はNG。 char str[10]; str = "Hello"; 例外的に宣言時の代入だけ認められる。以下はOK。 char str[10] = "Hello"; 宣言時以外で代入する場合は、sprintf関数を使用する。 ★コード★ #include stdio.h int main(void){ int i; char str[100]; char str1[] = "文字列"; char str2[] = "連結"; char str3[] = "お手軽"; for (i=1; i =10; i++) { /* ループ回数を文字列に格納 */ sprintf(str,"ループ回数:%2d",i); puts(str); } sprintf(str,"%sの%sだって%sよ",str1,str2,str3); puts(str); return 0; } ★実行結果★ ループ回数: 1 ループ回数: 2 ループ回数: 3 ループ回数: 4 ループ回数: 5 ループ回数: 6 ループ回数: 7 ループ回数: 8 ループ回数: 9 ループ回数:10 文字列の連結だってお手軽よ
https://w.atwiki.jp/udhimaster/pages/21.html
文字列変数を操作したり、キーボードからの文字入力を受け付けることができます。 目次 各部の説明1. 代入先の指定 2. 代入方式 3. 代入する文字列 4. 変数名の設定 各部の説明 1. 代入先の指定 代入先の文字列変数を指定します。 「代入先を変数で指定」する際は、通常/予備変数に3000000(文字列変数の呼び出し値)以上の値を入れて使用してください。 2. 代入方式 代入の方式を選択します。 ここでは、代入先を「左辺」、代入する文字列を「右辺」と呼ぶことにします。 「=」 右辺を左辺にそのまま代入します。 「+=」 右辺を左辺に追加します。 「に↓から上1行コピー」 右辺の上1行を、左辺に代入します。 「に↓から上1行切り出し」 右辺の上1行を切り出し、左辺に代入します。 処理を行うと、右辺の上1行は消去されます。 「に↓から1文字切り出し」 右辺の先頭1文字を切り出し、左辺に代入します。 処理を行うと、右辺の先頭1文字が消去されます。 全角、半角共に対応しています。 特殊文字の場合は特殊で、1回の処理で、\A+なら「\A+」、\c[1]なら「\c[1]」を切り出すことができ、 \r[X,A]など文字列が入る特殊文字の場合は「\r[」だけを切り出します。 「に↓のファイル内容読込」 右辺のファイル名の内容を読み込み、左辺に代入します。 ファイルがなかった場合は、「 NoFile 」が代入されます。 「をファイル↓に出力」 左辺の内容を、右辺のファイル名で保存します。 「に↓フォルダのファイルリスト取得」 右辺のフォルダ名の中にある、ファイル名一覧を取得し、左辺に代入します。 一覧は1ファイルにつき1行なので、各々のファイル名は「上1行切り出し」などを使用して取得してください。 フォルダがなかった場合や、ファイルを対象にした場合などは、「 ERROR 」が代入されます。 「から↓の文字列を全消去」 左辺から、右辺の文字列だけを全て消去します。 (例:左辺が「あいうえお」のとき、「い」を全消去すると、左辺が「あうえお」となります) 「から以下の文字列を置換」 左辺から、左側の入力欄の文字列を、右側の入力欄の文字列で置換します。 (例:左辺が「あいうえお」の時、「え」を「お」で置換すると、左辺が「あいうおお」になります) (コンマ区切り(CSV)のデータを読み込んだ際に、「,」を改行で置換して、1行切り出しで読み込みなどの用途に使えるかと思われます) 「 から指定文字まで切り出し 」 左辺の先頭から、入力欄に入れられた文字列までを切り出して、左辺に代入します。 (例:左辺が「あいうえお」のとき、「う」まで切り出すと左辺が「あい」になります) 指定した文字列が見つからない場合は、「 NotFound 」が代入されます。 「 の指定文字以降を切り出し 」 左辺の、入力欄に入れられた文字列以降を切り出して、左辺に代入します。 (例:左辺が「あいうえお」のとき、「う」以降を切り出すと左辺が「えお」になります) 指定した文字列が見つからない場合は、「 NotFound 」が代入されます。 3. 代入する文字列 代入する文字列は、次の4種類の方法で指定できます。 手動入力 手動で文字を入力します。 この入力には、\v[?]や\s[?]といった特殊文字も使用可能です。 文字列変数 文字列変数を使います。 キーボード入力 入力欄を表示し、プレイヤーが入力した文字列を使用します。 「文字数(半角)」で、入力できる文字数を指定できます。全角文字は「2文字」として換算されます。 「キャンセル有」にチェックすると、Escキーで入力をキャンセルすることができます。 「左辺を書換」にチェックすると、左辺に元から入っている文字列が入力された状態で、入力欄を表示します。 ※テストプレイ時に限り、キーボード入力中に 「F7~F9キーなどのデバッグメニューを表示する」あるいは「F11キーで再読み込みする」と 入力中の文字のサイズが変わってしまいますが、この動作自体は仕様です。 ロード位置を変数で指定 「変数の値」の文字列変数を読みに行きます。 たとえば、読み込んだ変数の値が3000002(文字列変数2番の呼び出し値)という風に格納されていれば、文字列変数2番を読みに行きます。 4. 変数名の設定 変数に名前を付けたり、変数の最大数を増やしたりすることができます。 設定したい変数をプルダウンリストから選び、設定したい名前を入力したら「名前を付ける」ボタンを押してください。 「↓コピー」ボタン プルダウンリストで選択中の変数の名前を、下の「変数名」の欄にコピーします。 「サイズ+1」ボタン プルダウンリストで選択中の変数種の最大数を一つ増やします。 例えば、「V3-1」(予備変数3の1番)が表示されているときに「サイズ+1」ボタンを押すと、予備変数3の変数最大数が一つ増加します。 ショートカットキー 変数名欄に入力カーソルが当たってる状態で、下記のショートカットキーが使用できます。 キー 説明 ↑↓ 名前を変える変数を切り替える Enter 名前を設定する(「名前を付ける」ボタンを押したのと同じ) Shift + ↓ 対象変数の名前を名前欄にコピー(「↓コピー」ボタンを押したのと同じ) Shift + ← 名前欄をクリアする
https://w.atwiki.jp/reverse_python/pages/15.html
ヒアドキュメント """で文字列を囲みます。文末に\を記述すると、直後の改行は無視されます。 # ヒアドキュメントで代入 text = """\ This is a example \ of here document.""" print text # This is\na example of here document. 先頭と末尾の空白文字の削除 strip() を使います。 # 先頭にタブと空白、末尾に改行がある文字列の例 text = "\t strip\n" # 先頭と末尾の空白文字の削除 print text.strip() #= strip
https://w.atwiki.jp/abwiki/pages/130.html
文字列処理は重要です。ポインタが理解出来ているかどうかの重要な見極めにもなります。 基本 "今日は○○する気分ではない" という文字列は最後に0(ナル文字)がつきます。 ナル文字とヌルとヌルポインタの違いはその意味にあり、 ナル文字(NUL)はゼロ終端系文字列(*1)に於ける文字の終了 nullは無効な値 null pointerは無効なポインタ をそれぞれ意味します。 補足 1)ゼロ終端系でない文字列にはPASCAL文字列等があり、PASCAL文字列は処理速度に優れた特性があるため、Excel内部等で用いられている。 実際に使ってみよう Sting型に慣れている人は面倒だと思うけど、ついてきて欲しい。 1 byte型配列を使おう! #N88BASICDim mes[123] As Byte'123バイト確保lstrcpy(mes, "平井公彦")'mesに文字列をコピーlstrcat(mes," 私は彼が好きです")'mesに連結wsprintf(mes+lstrlen(mes), "%d",100)'100を文字列にして追加Print MakeStr(mes) なんということのないコードだが、配列にデータをコピーしているのであふれにように中尉。 おしりがNULなのでmes[8]=0などと直接値を代入しててもおk 2 ポインタ #N88BASICDim p As *ByteConst A="平井公彦"Const B="松嶋絵美"p=APrint MakeStr(p)p=BPrint MakeStr(p) エラーメッセージなどすでに文字列が確保されているようなときは、ポインタを使えばいい。 アドレスを渡すだけなので、バッファオーバーフローとかないし、速い。 しかし、ポインタの指した先がリテラルの場合は変更できないと思え。 Ex 文字列の先頭にExをつけると(例:Ex"asdf")エスケープ文字列が有効になります。 例えば\nが改行、\tがタブ、\qがクオートです。 昔のBASICのように"asd"+Chr$( H0D)+"qwe"でもコンパイルは通りますが、 Ex"asd\nqwe"と書いたほうが、文字が少なくて住みます…。 お好みにあわせてどうぞ。 文字、文字列の種類と変数型の注意点 文字列を扱う場合、通常は "BASIC" などとしてプログラム内ではクオーテーションで囲む。変数に代入する場合は、 Dim str1 As Stringstr1="BASIC" としてDim文で定義したString型変数に文字列を代入することが出来る。 String型は標準的なBASIC言語に準拠した文字列型で、その使い方はBASIC言語として一般性と汎用性がある。 文字列とは別に、1文字だけを扱う事も可能。英字アルファベットを表記するASCIIコードは 英字で255文字に収まる事から、数値的に255が表現できれば良いので1Byteの範囲に収まる。 Byte型変数は255までの数値表現が可能だから、Byte型の変数一つでASCII英字コード一文字を表す事が出来る。 Dim c As Bytec=97print c'数値として表示print Chr$(a)'文字として表示 このByte型を配列とすれば複数の文字を代入でき、文字列として扱う事も可能になる。 文字を扱う場合、一つの文字のByte変数とその集合であるByte型配列があり、一字以上の文字列を扱うString型がある。 普段BASICを使う場合はString型を用いる事が多い。 String型は内部でメモリーを確保して文字列を保存するので、LongやDoubleとは異なり可変長の変数型として処理 される。String型文字列のメモリーブロックはプログラムが終了すると自動的に開放される。 NULL(NUL)終端文字列 Byte文字、String型文字列とは別に、Win32APIを利用する場合にはC/C++と互換性のあるNull(NUL)文字終端の文字列を 使う。これはByte型変数の配列と等しく、異なるのは文字終端がNull(NUL,ゼロ)で終わると規定されている所。 Byte配列の文字列は標準的なBASICには無い型で多くのBASIC処理系では扱えない事が多いが、Win32APIを利用する場合には C/C++と互換性があり、Win32APIを利用する事が多いabでは多用される。 見た目はByte型文字配列と何ら変わらない。 Dim nstr(20) As Bytelstrcpy(nstr,"hello null string")'Null終端Byte配列文字列を作成print MakeStr(nstr)'文字列を表示 Null終端文字列は、文字列の最後にNull(数字のゼロ)が来るが、普通はAPI文字列関数を利用して作成する事が多い。 文字列を作成するときに利用したlstrcpy()関数は、標準的なBASIC言語の関数ではなくてWindows環境のC/C++関数。 lstrcpy()関数を用いてString型からByte配列型Null終端文字列を作るのである。 print文で文字列を表示する場合は変換が必要で、MakeStr()関数にてByte配列のNull文字列をString型に変換しておく。 BASIC標準のPrint文は、引数がString型だからである。 lstrcpy()関数などを用いないで同等のByte型Null終端文字列を作る場合は、下記のようにする。 nstr(0)=97nstr(1)=98nstr(2)=99nstr(3)=0print MakeStr(nstr) Print文では引数がString型なので変換が必要だが、Msgbox等では元々Win32APIの関数なのでByte配列Null終端文字列 をそのまま扱え、String型へ変換する必要がない。 lstrcpy(nstr,"MessageBox")Msgbox 0,nstr Byte型配列Null終端文字列と、String型文字列との相互変換は、MakeStr(),StrPtr()関数などを使う事が出来る。 Byte型配列の文字列の初期化時の注意点 Byte型配列の文字列では、String型とは異なりDim文などで確保されたメモリー内容についてきちんと初期化 されている保証がないので、配列やメモリー領域を確保したりする場合は初期化が必要になる。 32個のByte配列を初期化する場合、For文を使う例を示す。 Dim nstr(31) As ByteFor i=0 to 31nstr(i)=0next i String型ではZeroString()関数が用意されているが、ここではByte型配列の文字列なので、 同等の処理は、ZeroMemory()関数を用いて行う事が出来る。 ZeroMemory(nstr,32) ZeroMemory()では要素数を与える。配列の添え字と要素数が一致しないので注意。 文字列のエスケープ記号処理の注意点 abの文字列は、C/C++のようなエスケープ記号をサポートしない。標準的なBASIC文字列は"\r\n"のような改行を 扱う事は出来ない。String型の文字列は、"\r\n"を4文字の文字列として処理する。 Print "abcdef\r\n"'エスケープしない文字列 abの文字列はAPIのwsprintf()関数やlstrcpy()関数内でもエスケープ記号は処理されないので注意が必要。 しかし、Ex修飾するとエスケープ記号が利用でき、"abc\ndef"という文字列が利用可能。 Print Ex"abc\r\ndef"'エスケープ記号が有効 エスケープ記号はC/C++において多用される記法だが、同等のコードは、 従来のBASIC型の記法を用いてChr$()関数を用いて改行コードを追加することも可能。 Print "abc"+Chr$(13)+Chr$(10)+"def"lstrcpy(nstr,"abc"+Chr$(13)+Chr$(10)) ワイド文字列の扱いについての注意 日本語など国際化された文字列は、英数字ASCII文字列の255文字では扱えない。多国語対応では1Byte以上を使って 1文字を表す文字コードがマルチバイト文字、ワイド文字等が使われ、漢字も1Byte以上で表記される。 abで用意されている文字列関数は基本的に1Byte処理を行いこれで十分な場合もあるが、場合によっては問題が起きる。 そのためInStr2()関数が提案されている。 http //hira.hopto.org/tips/activebasic/memory/instr_multibyte.xhtml String文字列へのポインタについての注意 abでは、Byte/Long/Double型のポインタは存在するがString型へのポインタは無い。String型は内部でメモリーを確保し 文字列作成しているので、String型文字列自体がポインタとして扱われていると表現できる。 abにおいてWin32API関数の文字列引数でString型とByte配列Null終端文字列が等しく扱えて互換性があるように 見えるのは、両方ともポインタアクセスを行っているため。 String文字列をポインタで指して直接文字列を配列操作する場合、内部処理は不明なのでString型で扱わない方が良い。 どうしてもポインタ操作を行う場合は、一旦Byte型配列の文字列に変換して処理するのが良い。 String型を用いる場合は、標準BASICで用意されている文字列関数を使うようにしてポインタ操作は避ける方が良い。 異なる文字列間の相互変換は、http //www.mb.ccnw.ne.jp/garger-studio/gameprog/ab0052.htmlに詳しく記載されている。 String型文字列の詳細は、http //www.mb.ccnw.ne.jp/garger-studio/gameprog/ab0051.htmlに記載されている。 String型文字列として利用されていた領域はabプログラム終了と同時に開放される。 なお、abのポインタの記法は、*Byte/BytePtr双方が可能だが、*Byteと書く記法はC/C++と同じ。Helpに書かれている記事 ではBytePtrと記載されているが同じ意味。
https://w.atwiki.jp/phptest/pages/27.html
Java 部分文字列は String#substring(int, int)。index, index である。第二引数は文字列長の指定ではない。 String s = "ABCDEFG"; int i = ... //取り出し開始位置。0基準。 int j = ... //取り出し終了位置。同上。指定位置の文字は含まれない。 //i == 0 の場合は、取り出された結果の文字列の長さは j になる。 String sub = s.substr(i, j); 一致判定は String#startsWith(String), String#endsWith(String) 検索は String#indexOf(String)。返り値は0基準。 PHP Java の substr, startsWith, endswith, indexOf に相当するもの。 index,index か index, length かも明記。基準が0か1かも明記。 もし少し探して見つからなければ正規表現で解決するのでしょうね。 mb_substr(文字列,index,length)とすると文字数が取れます。substr(文字列,index,length)とするとバイト数からとり、たとえば1(1バイト)と1(2バイト)で結果が変わります。 $str2 = こんにちは ; $substr3 = substr($str2, 2, 2); $substr4 = mb_substr($str2, 2, 2); print($str2. の2バイトから2バイト取り出すと .$substr3. です br ); //ん(String) print($str2. の2文字目から2文字取り出すと .$substr4. です br ); //にち //失敗した場合や文字列が空の場合はFALSEが返されます。 参照:phpbook-文字列の一部を取得 文字列の一致がとりたいときにはいくつかの方法があります。 1.strstr(文字列,一致されたい文字列)では文字列の最初に出てくる「一致されたい文字列」を探します。 $email = name@example.com ; $domain = strstr($email, @ ); echo $domain; // @example.com と表示します //失敗するとFALSE しかしStringで見つかった所から最後までの長さの文字列を返そうとするので注意が必要です。 参照:The saibase-文字列の一致 2.strpos(文字列,一致されたい文字列)はstrstrの機能に加え、指定された文字列やfalseを返すことが出来ます。 $mystring = abc ; $findme = a ; $pos = strpos($mystring, $findme); //この関数でも失敗するとFALSEを返します。 //ここの判定式で==を使ってしまうとFALSE == 0と見なされ、indexの0と誤認されてしまいます。 if ($pos === false) { echo "文字列 $findme は、文字列 $mystring の中で見つかりませんでした"; } else { echo "文字列 $findme が文字列 $mystring の中で見つかりました"; echo " 見つかった位置は $pos です"; } 参照:-PHPで前後一致を取る javascript String#substr(index,length); //JavaやPHPと同じようにsubstr(index,length);メソッドが使えます。 var alpha = "abcdefg".substr(2,4); //"cdef"が入ります。 //指定lengthが存在しなかったり、それが全長よりも大きい場合にはindexからの全長を返します。 //まずindexから存在しなかったときは-1を返します。 document.write(alpha); //cdef 参照:とほほのJS-Stringライブラリ String#indexOf(String); //String#indexOf(string);メソッドでは、出現する位置をintで返すことが可能です。 var beta = "hijklmn".indexOf("k"); //見つからない場合は-1を返します。 document.write(beta); //3 参照:ぶれすとつーる-単語前方一致・後方一致 前方一致、後方一致もPHPと同様に取れます。 Java の substr, startsWith, endswith. indexOf に相当するもの。 index,index か index, length かも明記。基準が0か1かも明記。 もし少し探して見つからなければ正規表現で解決するのでしょうね。 SQL 独自の簡単なワイルドカードを使って判定を行います。% 任意の0文字以上の文字列 _ 任意の1文字 サンプル //prefectureデータベースを使用。 +------+--------+------------+ | code | name | population | +------+--------+------------+ | 01 | 北海道 | 5570000 | | 02 | 青森県 | 1407000 | | 03 | 岩手県 | 1364000 | +------+--------+------------+ mysql select * from prefecture where name like __県 ; //実行結果 +------+--------+------------+ | code | name | population | +------+--------+------------+ | 02 | 青森県 | 1407000 | | 03 | 岩手県 | 1364000 | +------+--------+------------+ ※likeを使用する場合、where内には関数のみを記述して下さい。 × select * from prefecture where code = 03 like name = __県 ; ○ select * from prefecture where name like __県 ; ×のまま実行するとどちらの条件式も反映されません。 参照:DBOnline-パターンマッチングで比較 Excel数式 LEFT関数に代表される関数が使用できます。 =LEFT(文字列,[文字数]) :文字列の左端から指定した文字数だけ取り出す。 =RIGHT(文字列,[文字数]) :文字列の右端から指定した文字数だけ取り出す。 =MID (文字列,開始位置,文字数) :文字列の指定した位置から指定した文字数だけ取り出す。 参照:Excel基本講座 検索は検索機能を使って行うほか、マクロを組むことでも実行可能なようです… 参照:Excel VBA 入門講座
https://w.atwiki.jp/imops-forth/pages/26.html
序 固定文字列は、内容が固定された文字の系列をデータとして利用するものである。内容も長さも後から変えられることは無いという前提であるから、大抵は、大域データ域にその長さ分のメモリー領域を確保して書き込んでおく。Forthではデータディクショナリーである。 全体としては変化する文字列の、変化しない部分を、固定文字列にしておくという使用法もある。 Forthで固定した文字列を扱う方法は、引用符でリテラル(文字通り)に書き込むやり方と、ワードとして文字列定項を定義するやり方がある。 他方、挿入したり切除したりできる可変的文字列を扱う仕組みは、ほとんどforth標準には入っていない。それぞれの環境ごとに様々な方法が実装されていて、統一できないのである。確かにforth標準中にも文字列に関するワードはオプションとしていくつか規定されているが、あまり便利なものではない。 例えばMopsでは、オブジェクト指向の機構を利用してヒープベースの文字列クラスが定義されている。 このような状況であるため、ここでは固定文字列についてのみ説明することとする。ちなみに、文字列は英語ではキャラクター ストリング(Character String)であり、略してストリング(String)と呼ぶことが多い。 リテラル S" ワード定義内に文字列を埋め込む方法は、ワード S" で文字列を開始することである。文字列の終わりを記すのは、二重引用符 "である。この対はコンパイル状態で使用することが想定されているので、コロン定義の外に書いても動作は保証されない。 string-word S" This is a constant string." [コード] ; まず、S"はワードであるので、その後にはひとつ空白が必要である。その空白は文字列には算入されない。二番目からの空白は文字列に入る。終わりの " は、ワードではなく区切り文字である。したがって、空白なしに付けてよい。空白があると、それも文字列に追加される。 Mopsでは、S" の短縮形として" というワードも定義されている。つまりSを書かなくてもよいわけである。多くの環境で同じものがあるようである。 Forthの文字列は、スタック上では2つの数値で表現される。先に文字列が格納されているデータ域のアドレス、トップに文字列のバイト長である。addr lenストリングなどといわれることもある。長さが確定値としてあると、何かと便利である。 環境によっては、日本語の文字列は扱えない可能がある。Mopsでは、PowerMopsまではShift-JISに近いMac-Japaneseが利用でき、 iMopsからはUTF-8になったが、一貫して日本語も問題なく使えてきた。gforthもUTF-8対応しているらしい。商用のものは多分大丈夫だろう。 ただし、固定文字列の最長限度は環境によって異なる。Mopsでは255バイトまでである。これは1バイト数限度ということだが、多くの環境で同じ制限のようである。実際上はこれだけ長い文字列は滅多にない。ただ、この制限がバイト数であることに注意が必要である。UTF-8で動作している場合、日本語文字は2バイト以上あるので、127文字以下しか入らない。 Mopsでは、Stringオブジェクトを用いれば、制限は形式上2~4GB(実際上メモリー上限)まで拡大される。長い文字列は文字列オブジェクトにすればよいわけである。 このワードは、二重引用符 " を特殊文字として扱うので、文字列の本体が二重引用符を含むことができない。また、改行を含むこともできない。そこで、次のようなエスケープ文字を含む文字列を扱う機構がある。 エスケープ S"の代わりにS\"を用いれば、バックスラッシュ記号を用いて特殊記号をエスケープ文字として文字列に挿入することができる。例えば、 esc-string S\" This string can contain \" or line breaking\rlike that." [コード] ; のように書くと、\"の個所には二重引用符が、\rのところには改行が挿入された文字列がコンパイルされる。 これはforth 200xで新しく導入されたワードであり、PowerMopsには定義されていない。iMopsでは定義されている。 主なエスケープ文字を挙げておく。バックスラッシュの後の文字は、大文字小文字を区別する(case-sensitive)ので注意。 \t タブ \l LF (UNIX系での改行) \r CR(Macでの改行) \m CRLF (MSDOS, Windowsでの改行) \n newline (当環境での改行) \z ヌル($00) \" or \q (二重引用符) \\ (バックスラッシュ自体) バックスラッシュ後の文字が規定外であったときの挙動は、当のforth環境に依存するとされる。iMopsでは静かに無視する。 C言語型文字列 C" OSの動的ライブラリがC言語系で書かれていることが多いため、C言語形式の0で終わる文字列が必要になる局面もでてくる。そこで、C言語型のリテラルを形成するワードC"が定義されている。使い方はS"とほぼ同じである。 C-str C" This is a C type string." [コード] ; この場合、文字列の格納場所のアドレスのみがスタックに積まれる。ライブラリ関数のパラメターとして文字列を渡す必要があるときには、このアドレスを渡せば良い。 文字列定項 Forth標準 文字列定項の方法、といっても標準のforthには特別な手段は見当たらない。普通に文字列をコロン定義で定義してしまえば良い、ということであろう。 ST1 ( -- addr len ) S" This is a colon definition that defines a string constant." ; 必要なところでST1を呼び出せば良い。 メモリー効率の点からいえば、複数の個所で引用される文字列なら、リテラルよりも文字列定項にした方が効率が良い。リテラルの場合、それを書き込む毎に文字列がデータとして格納されるので、同じ内容ならメモリースペースの無駄である。とはいえ、近年では、よほど特殊な小さい環境でもなければ、文字列程度では誤差の範囲内ともいえる。それよりも、コードにいちいち文字列を書かなくても良いという点が文字列定項の利点ということになるのだろう。 Mopsでの拡張 SCON 文字列定数といってもいい。固定文字列を定数のように宣言定義しておいて、その名前で呼び出す方法である。SCONというワードを用いる。String CONstantの略であろう。 例えば: SCON S1 ~"String Constant Declaration"~ まず、SCONと宣言し、文字列の名前(ここではS1)、そして、何か同じ文字で囲まれた文字列、である。これは宣言であるから解釈実行環境、コロン定義の外で実施しなければならない。 SCONは、文字列名の後の最初の非空白文字を区切り文字として採用し、次に出てくるその区切り文字までを文字列とする。したがって、当の文字列中に含まれない適当な文字を区切り文字として採用すれば良い。また、区切り文字と文字列の間に空白は必要ない。上の例では、S1は二重引用符を含んだ文字列になっている。そして、この文字列を必要とするところで名前S1を書けば、 some-word ... S1 \ -- addr len ... 定義として宣言された文字列のアドレスと長さがスタックに積まれることになる。コロン定義した文字列を呼び出すより効率は良い。 CString SCONと同じ構文で、C言語型の文字列を定義するワードが、CSTRINGである。 CSTRING CS1 ~"C type String Constant"~ Mopsではもともと、add lenのlen(length 長さ)を落とせば、C言語型の文字列として通用するようになっていた(多くのforth環境もそのようになっているように思われる)。しかし、MacOSXになって、外部関数へのパラメターとしてC型の文字列が必要となる場合が増えたため、多少の効率化を図って定義されたのが、このCSTRINGである。用法は、SCONの場合と全く同じである。名前を呼び出せば、アドレスだけがスタックに置かれる。 次は、ページを替えて、文字列の比較、印字する方法、続いて、1文字を扱う方法について述べる。 文字列とASCII文字の印字
https://w.atwiki.jp/emeditor/pages/133.html
文字列から「簡単に」メニューを作成・表示・選択するスクリプトです。 選択された文字列(選択されなければ空文字)を返します。 セパレータ(空文字列)・無効(_ アンダーバー)・チェック(. ピリオド)可能。 表示位置は、デフォルトでカーソル位置、引数 True でマウス位置。 書式は下の使用例がすべてです。 String.prototype.choice=function(p){ var t,m,q=1,r=RegExp; return(t=(m=function k(a){ var u=CreatePopupMenu(),i=0,s; while(i a.length)typeof(s=a[i++]|| )== string ?s.match(/^([\._])(.*)$/) ?u.Add(r.$2,q++,r.$1== . ?8 1) u.Add(s,s?q++ 0,s?0 2048) u.AddPopup(s[0],k(s.slice(1))); return u} (eval( [ +this.replace(/\s*(^|,|\[|\]|$)\s*/g, $1 ). replace(/([^,\[\]]+)/g," $1 ")+ ] ))). Track(p)) 0?m.GetText(t) } 使用例 alert( Above, , Below, .Checked, _Disabled, [Envelop, [Group, _Hide, Inside],[Job, Knife, .Letter]], Fast Key .choice()|| none ) Copyright Csardas 名前 コメント